// 导入数据库操作模块
const db = require('../db')
// 导入 bcryptjs 这个包
const bcrypt = require('bcryptjs')
// 导入生成 Token 的包
const jwt = require('jsonwebtoken')
// 导入全局的配置文件
const {jwt:jwtConf} = require('../config')

// 注册新用户的处理函数
exports.regUser = (req,res)=>{
    // 获取客户端提交到服务器的用户信息
    const userinfo = req.body
    db.query('select * from ev_users where username=?',userinfo.username,(err,results)=>{
        // 执行 SQL 语句失败
        if (err) {
            return res.sendJson(err)
        }
        // 判断用户名是否被占用
        if (results.length > 0){
            return res.sendJson('用户名被占用，请更换其他用户名！')
        }
        // 调用 bcrypt.hashSync() 对密码进行加密
        userinfo.password = bcrypt.hashSync(userinfo.password, 10)
        // 定义插入新用户的 SQL 语句
        db.query('insert into ev_users set ?', userinfo, (err, results) =>{
            // 判断 SQL 语句是否执行成功
            if (err) {
                return res.sendJson(err)
            }
            // 判断影响行数是否为 1
            if (results.affectedRows !== 1){
                return res.sendJson('注册用户失败，请稍后再试！')
            }
            // 注册用户成功
            return res.sendJson('注册成功！', 0)
        })
    })
}

// 登录的处理函数
exports.login = (req,res)=>{
    // 接收表单的数据
    const userinfo = req.body
    // 执行 SQL 语句，根据用户名查询用户的信息
    db.query('select * from ev_users where username=?', userinfo.username, (err, results) =>{
        // 判断 SQL 语句是否执行成功
        if (err) {
            return res.sendJson(err)
        }
        // 执行 SQL 语句成功，但是获取到的数据条数不等于 1
        if (results.length !== 1) {
            return res.sendJson('登录失败，用户名或者密码不存在！')
        }
        // TODO：判断密码是否正确
        const compareResult = bcrypt.compareSync(userinfo.password, results[0].password)
        if (!compareResult) {
            return res.sendJson('登录失败，用户名或者密码不存在!！')
        }
        // TODO：在服务器端生成 Token 的字符串
        const user = {...results[0], password:'', avatar:''}
        // 对用户的信息进行加密，生成 Token 字符串
        const tokenStr = jwt.sign(user,jwtConf.jwtSecretKey,{expiresIn:jwtConf.expiresIn})
        // 调用 res.send() 将 Token 响应给客户端
        return res.sendJson('登录成功！', 0, {token:tokenStr})
    })
}
